// Problem Description  还记得中学时候学过的杨辉三角吗？具体的定义这里不再描述，你可以参考以下的图形：
// 1
// 1 1
// 1 2 1
// 1 3 3 1
// 1 4 6 4 1
// 1 5 10 10 5 1

// Input  输入数据包含多个测试实例，每个测试实例的输入只包含一个正整数n（1<=n<=30），表示将要输出的杨辉三角的层数。

// Output  对应于每一个输入，请输出相应层数的杨辉三角，每一层的整数之间用一个空格隔开，每一个杨辉三角后面加一个空行。

// Sample Input
// 2 3

// Sample Output
// 1
// 1 1
// 1
// 1 1
// 1 2 1

#include <iostream>
#include <vector>

using namespace std;

void build(int height)
{
    vector<vector<int>> layer;
    for (int i = 0; i < height; i++)
    {
        vector<int> row;
        for (int j = 0; j <= i; j++)
        {
            if (j == 0 || j == i)
            {
                row.push_back(1);
                cout << 1 << " ";
            }
            else
            {
                row.push_back(layer[i - 1][j - 1] + layer[i - 1][j]);
                cout << layer[i - 1][j - 1] + layer[i - 1][j] << " ";
            }
        }
        cout << endl;
        layer.push_back(row);
    }
}

int main()
{
    int n;
    while (cin >> n)
    {
        build(n);
    }
    return 0;
}
